This is an R Markdown presentation. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see http://rmarkdown.rstudio.com.
3 de enero de 2019
This is an R Markdown presentation. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see http://rmarkdown.rstudio.com.
When you click the Knit button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document.
La Ciencia de Datos es un área de trabajo interdisciplinar que incluye procesos para recopilar, preparar, analizar, visualizar y modelizar datos que permitan generar conocimiento útil para comprender problemas complejos y ayudar en la toma de decisiones (Casillas 2016).
Un científico de datos es aquella persona con dominio en matemáticas, estadísitica, computación y tecnología, perfilandose actualmente como una de las profesiones del futuro (Good Rebels).
R fue creado en 1992 en Nueva Zelanda por Ross Ihaka y Robert Gentleman basandose en la sintaxis del lenguaje S desarrollado principalmente por John Chambers en Bell Laboratories y Scheme desarrollado por por Guy L. Steele y Gerald Jay Sussman (Ihaka 1998).
R es un lenguaje de programación interpretado, de distribución libre, bajo Licencia GNU, y se mantiene en un ambiente para el cómputo estadístico y gráfico, actualmente ampliamente aplicado para el procesamiento de datos en ciencias (Santana y Farfán 2014).
R no es un sistema estadístico sino un ambiente en el que se aplican técnicas estadísticas, este software corre en distintas plataformas Linux, Windows, MacOS, e incluso en PlayStation 3 (Santana y Farfán 2014).
El sistema R esta dividido en dos partes conceptuales: El sistema base de R, que es el que puedes bajar de CRAN, y en todo lo demás, principalmente paquetes modulares.
La capacidad de gráficos de R es muy sofisticada. Existe paquetería para graficar, crear y manejar shapefiles; manipular y crear datos en distintos formatos como netCDF, csv, xlsx, tiff, etc.
RStudio es un entorno de desarrollo integrado (IDE) para el lenguaje R, disponible para Windows, Mac, Linux y en casi todos los sistemas operativos.
Algunas ventajas de usar RStudio son : es libre, nos permite abrir varios scripts a la vez, nos permite ejecutar pedazos de código de los scripts, disponibilidad de autocompletado de código, etc.
Se puede descargar desde los siguientes enlaces : R v3.5.2 y RStudio
| Función | Acción |
|---|---|
| library() | Lista de paquetes instalados |
| install.packages(“Nombre_del_paquete”) | Instalación de un paquete |
| library(Nombre_del_paquete) | Cargar un paquete a la sesión |
| search() | Lista de paquetes instalados y cargados a la sesión |
| .libPaths() | Directorio en el que ‘R’ almacena y busca los paquetes |
R dispone de un buen sistema de ayuda , lo que nos ayudará a obtener información de cualquier función en específico, caracter o palabra.
| Función | Acción |
|---|---|
| help() | Muestra una ventana de ayuda general sobre ‘R’ |
| help.start() | Arranca un manual de ayuda completo en formato html, utilizando el navegador del sistema |
| help(Nombre) o ?Nombre | Muestra una ventana de ayuda sobre una función |
| help.search(“Nombre”) | Muestra un listado de contenidos acerca de una función, caracter y palabra |
# LOS COMENTARIOS EN "R" EMPIEZAN CON EL CARÁCTER '#' # -----------------------------------------------------
u <- 5
print(u)
## [1] 5
u
## [1] 5
((5*5+3+5)^2) + 5/2
## [1] 1091.5
log((1/pi)* 5) #Logaritmo neperiano
## [1] 0.464708
v <- 1/Inf #Divide un número por Infinito v
## [1] 0
w <- 0/0 ; v # Indeterminado
## [1] 0
p = 758.9 # Presión en mmHg patm = p*(1/760.0021) ; patm # Presión en atmósferas
## [1] 0.9985499
Todas las cosas que manipula R se llaman objetos, por ello se dice que R esta orientado a objetos (Santana y Farfán 2014).
Los objetos son estructuras que combinan datos y funciones que operan sobre ellos y son muy útiles en un entorno como R (Gil 2018).
En general, cada tipo de objeto viene definido por una serie de atributos. Las funciones genéricas (como por ejemplo summary o plot) reconocen estos atributos y llevan a cabo distintos tipos de acciones en función del tipo de objeto (Amazon AWS 2019).
| Clases atómicas | Descripción | Ejemplo |
|---|---|---|
| Character | Cadenas de caracteres | cimma <- “minería” |
| Numeric | Números reales | g <- 9.8 |
| Integer | Números enteros | edad <- 20L |
| Complex | Números complejos | u <- 5 + 2i |
| logical | Lógicos o booleanos | v <- FALSE |
| NA | Datos perdidos o faltantes | w <- NA |
| NaN | Datos indeterminados | z <- NaN |
| Objetos | Tipos | Varios Tipos |
|---|---|---|
| Vector | Numérico, caracter, complejo o lógico | NO |
| Factor | Numérico o caracter | NO |
| Array | Numérico, caracter, complejo o lógico | NO |
| Matrix | Numérico, caracter, complejo o lógico | NO |
| Data frame | Numérico, caracter, complejo o lógico | SI |
| ts | Numérico, caracter, complejo o lógico | SI |
| List | Numérico, caracter, complejo, lógico, función, expresión, etc. | SI |
Cada uno de las clases de objetos más simples o atómicas no se encuentran ni se manejan de manera aislada, sino encapsulados dentro de la clase de objeto más básica del lenguaje R: el vector (Santana y Farfán 2014).
Un vector puede contener cero o más objetos, pero todos de la misma clase (Santana y Farfán 2014).
c(5,7,9,-15) # Creación de un vector sin asignarlo a una variable
## [1] 5 7 9 -15
u <- c(5,7,9,-15) # Creación de un vector asignandolo a una variable
card <- c("E","W","N","S")
assign("w", c(5,7,9,-15)) # La función 'assign' asigna un vector a una variable
print(u); print(v) ; print(w) ## [1] 5 7 9 -15 ## [1] 0 ## [1] 5 7 9 -15
NOTA: La impresión del vector se hace en un renglón que comienza con el símbolo ’[1]’, indicando con ello que el primer elemento del renglón corresponde al primer elemento del vector.
v <- vector("integer", 0)
v # Un vector de enteros sin elementos
## integer(0)
w <- vector("numeric", 5)
w # Un vector de tres ceros
## [1] 0 0 0 0 0
x <- 50:80 ; y = pi:7 print(x); class(x) ; print(y) ## [1] 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 ## [24] 73 74 75 76 77 78 79 80 ## [1] "integer" ## [1] 3.141593 4.141593 5.141593 6.141593
u <- seq(from = 2, to = 19, by = 2) print(u) # secuencia desde 2 hasta 18 de 2 en 2 ## [1] 2 4 6 8 10 12 14 16 18 v <- seq(from = 3, by = 3, length.out = 8) print(v) # secuencia de 8 números iniciando desde 3 y de 3 en 3 ## [1] 3 6 9 12 15 18 21 24
v <- c(pi, -3, 1+3i) w <- rep(v, times = 2) print(w) ; class(w) ## [1] 3.141593+0i -3.000000+0i 1.000000+3i 3.141593+0i -3.000000+0i ## [6] 1.000000+3i ## [1] "complex"
u <- c(3, 4, 5) v <- c(5, 4, 3) w <- c(u, v)
u <- c(18, 75, -2.33, 72) u[3] # El cuarto elemento ## [1] -2.33 u[4]+u[2] # La suma del cuarto y segundo elementos de 'u' ## [1] 147
temp <- c(28, 29, 29, 30) #Temperatura ambiente
names(temp) <- c("a", "b", "c", "d") # OTRA FORMA : temp <- c(a=28, b=29 ....
temp
## a b c d
## 28 29 29 30
temp["b"]
## b
## 29
temp["b"] <- 28
temp
## a b c d
## 28 28 29 30
v <- 4 + 34 + 2 # Resulta en un vector de longitud 1 v ## [1] 40 v <- c(21, 13) - c(4, 17) # Resulta en un vector de longitud 2 v ## [1] 17 -4 v <- c(2, 3, 4) * c(2, 1, 3) # Resulta en un vector de longitud 3 v ## [1] 4 3 12 v <- c(1, 2, 3, 4)^(4:1) # Eleva a potencias 4,3,2,1 v ## [1] 1 8 9 4
# Para obtener el seno de 30, 45 y 60 grados: # Primero se hace la conversión a radianes angulos <- c(30, 45, 60) * (pi/180) angulos # En radianes ## [1] 0.5235988 0.7853982 1.0471976 # Luego se aplica la función trigonométrica # sin() , cos() , tan() .... senos <- sin(angulos) senos ## [1] 0.5000000 0.7071068 0.8660254
Es una estructura de datos bidimensional (DATAMENTOR 2018).
La matriz es similar al vector, pero adicionalmente contiene el atributo: dim (dimensión) (DATAMENTOR 2018). Este atributo es un vector entero de dos elementos : el número de renglones y el número de columnas que componen a la matriz (Santana y Farfán 2014).
Un Array es una estructura de datos. Puede ser de 1D (por ejemplo, números, cadenas, etc.), 2D (por ejemplo, información de color de píxeles de una imagen), 3D (por ejemplo, tabla de datos) o cualquier n Dimensiones (QUORA 2015).
Se crea utilizando la función array (), usando vectores como entrada y el parámetro dim.
# CREACIÓN DE DOS VECTORES DE DIFERENTES LONGITUDES
vector1 <- c(54,-8,4)
vector2 <- c(1,7,18,14,-4,15.5)
column.names <- c("COL1","COL2","COL3")
row.names <- c("ROW1","ROW2","ROW3")
matrix.names <- c("Matrix1","Matrix2")
# LOS VECTORES ANTERIORES SERÁN LA ENTRADA DE NUESTRO 'ARRAY'
result <- array(c(vector1,vector2),dim = c(3,3,2),
dimnames = list(row.names,column.names,matrix.names))
print(result)
## , , Matrix1 ## ## COL1 COL2 COL3 ## ROW1 54 1 14.0 ## ROW2 -8 7 -4.0 ## ROW3 4 18 15.5 ## ## , , Matrix2 ## ## COL1 COL2 COL3 ## ROW1 54 1 14.0 ## ROW2 -8 7 -4.0 ## ROW3 4 18 15.5
m <- 1:20 # Un vector con 20 números dim(m) <- c(4, 5) # 4 renglones y 5 columnas class(m); m ## [1] "matrix" ## [,1] [,2] [,3] [,4] [,5] ## [1,] 1 5 9 13 17 ## [2,] 2 6 10 14 18 ## [3,] 3 7 11 15 19 ## [4,] 4 8 12 16 20 #LAS DIMENSIONES TAMBIÉN SE PUEDEN CAMBIAR dim(m) <- c(5, 4) ; m ## [,1] [,2] [,3] [,4] ## [1,] 1 6 11 16 ## [2,] 2 7 12 17 ## [3,] 3 8 13 18 ## [4,] 4 9 14 19 ## [5,] 5 10 15 20
#SELECCIÓN DE UN ELEMENTO (FILA Y COLUMNA) m[4,2] ## [1] 9 #SELECCIÓN DE UN ELEMENTO (POR POSICIÓN) m[7] ## [1] 7 #SELECCIONAR LOS ELEMENTOS DE UNA COLUMNA O FILA m[3, ] ## [1] 3 8 13 18 m[,3 ] ## [1] 11 12 13 14 15 class(m[, 3]) ## [1] "integer"
#ASIGNAR NOMBRES A FILAS Y COLUMNAS
rownames(m) <- c("uno", "dos", "tres", "cuatro", "cinco")
colnames(m) <- c("a", "b", "c", "d") ; m
## a b c d
## uno 1 6 11 16
## dos 2 7 12 17
## tres 3 8 13 18
## cuatro 4 9 14 19
## cinco 5 10 15 20
n <- matrix(1:12, nrow = 3, ncol = 4, byrow = TRUE)
n
## [,1] [,2] [,3] [,4]
## [1,] 1 2 3 4
## [2,] 5 6 7 8
## [3,] 9 10 11 12
u <- rbind(c(1.5, 3.2, -5.5), c(0, -1.1, 60)) u ## [,1] [,2] [,3] ## [1,] 1.5 3.2 -5.5 ## [2,] 0.0 -1.1 60.0
v <- matrix(1:6, 3, 2) ; v ## [,1] [,2] ## [1,] 1 4 ## [2,] 2 5 ## [3,] 3 6
n <- matrix(1:6, 3, 2) m <- rbind(8:10, 10:12) x <- n%*%m #LA TRANSPUESTA DE LA MATRIZ 'x' SE OBTIENE CON 't(A)' t(x) ## [,1] [,2] [,3] ## [1,] 48 66 84 ## [2,] 53 73 93 ## [3,] 58 80 102
En R, las cadenas de caracteres son vectores utilizados para nombrar objetos (Santana y Farfán 2014).
Un fragmento de texto se representa como una secuencia de caracteres (letras, números y símbolos) (Sánchez 2019).
persona <- c("Hugo", "Mario", "Luis")
meses<- c("Dic", "Feb", "Oct")
paises <- c("Brasil","Perú","Colombia")
gasesdeefec <- c( "CO2", "CH4" , "N2O", "CFC")
Un factor puede considerarse como una estructura de información, a la que se puede someter a algún tipo de procesamiento estadístico, cuyo núcleo son dos vectores: los niveles (levels) y un vector de índices enteros (Santana y Farfán 2014).
En R, se utilizan habitualmente para realizar clasificaciones de los datos, estableciendo su pertenencia a los grupos o categorías determinados por los levels (Santana y Nieves 2014).
Los niveles de un factor puede estar codificados como valores numéricos o como caracteres (Santana y Nieves 2014).
sexo <- c("M", "H", "H", "M", "H", "H", "H", "M", "H", "M")
sexo <- as.factor(sexo) ; sexo
## [1] M H H M H H H M H M
## Levels: H M
#COMO SE PUEDE VER EL NÚCLEO DE LA CLASE SON DOS VECTORES :
unclass(sexo)
## [1] 2 1 1 2 1 1 1 2 1 2
## attr(,"levels")
## [1] "H" "M"
table(sexo) ## sexo ## H M ## 6 4
mesdenac <- c("Dic", "Feb", "Oct", "Mar", "Feb", "Nov","Abr", "Dic", "Feb", "Oct")
meses <- c("Ene","Feb","Mar","Abr","May","Jun","Jul","Ago", "Sep","Oct","Nov","Dic")
m <- factor(mesdenac, levels= meses) ; m
## [1] Dic Feb Oct Mar Feb Nov Abr Dic Feb Oct
## Levels: Ene Feb Mar Abr May Jun Jul Ago Sep Oct Nov Dic
levels(m)[2] <- "marzo" ; m
## [1] Dic marzo Oct Mar marzo Nov Abr Dic marzo Oct
## Levels: Ene marzo Mar Abr May Jun Jul Ago Sep Oct Nov Dic
Una lista es una clase de datos que puede contener cero o más elementos, cada uno de los cuales puede ser de una clase distinta (Santana y Farfán 2014).
Al igual que los vectores, los elementos de la lista pueden ser nombrados, lo que añade mayor claridad a su significado (Santana y Farfán 2014).
listfam<- list(hombre = "Juan", mujer = "Sonia", casados = TRUE, numero.hijos = 3, nombre.hijos=c('Hugo', 'Paco', 'Mary'))
listfam
## $hombre
## [1] "Juan"
##
## $mujer
## [1] "Sonia"
##
## $casados
## [1] TRUE
##
## $numero.hijos
## [1] 3
##
## $nombre.hijos
## [1] "Hugo" "Paco" "Mary"
l1 <- list(nombre= "Marcos",nacimiento= 1986) ; l2 <- list(nombre= "Juan", DNI = 46174852) l3 <- list(l1,l2) ; l3 ## [[1]] ## [[1]]$nombre ## [1] "Marcos" ## ## [[1]]$nacimiento ## [1] 1986 ## ## ## [[2]] ## [[2]]$nombre ## [1] "Juan" ## ## [[2]]$DNI ## [1] 46174852
Un dataframe es una lista, cuyos componentes pueden ser vectores, matrices o factores, con la única salvedad de que las longitudes deben coincidir en todos los componentes (Santana y Farfán 2014).
La estructura de un dataframe es muy similar a la de una matriz, La diferencia es que una matriz sólo admite valores numéricos, mientras que en un dataframe podemos incluir también datos alfanuméricos (Santana y Nieves 2014).